From 2ab1b13092f0e0d84b2df5374043592778d5a8d1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 22 Dec 2019 23:10:01 -0500 Subject: [PATCH] columnview: Add a GtkColumnViewColumn:expand property This will be used to determine how to distribute available extra space in a column view. --- docs/reference/gtk/gtk4-sections.txt | 2 + gtk/gtkcolumnviewcolumn.c | 70 +++++++++++++++++++++++++++- gtk/gtkcolumnviewcolumn.h | 6 +++ 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 20f8352592..dc19164f0c 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -541,6 +541,8 @@ gtk_column_view_column_set_header_menu gtk_column_view_column_get_header_menu gtk_column_view_column_set_fixed_width gtk_column_view_column_get_fixed_width +gtk_column_view_column_set_expand +gtk_column_view_column_get_expand GTK_COLUMN_VIEW_COLUMN diff --git a/gtk/gtkcolumnviewcolumn.c b/gtk/gtkcolumnviewcolumn.c index 8879457a7f..0567931905 100644 --- a/gtk/gtkcolumnviewcolumn.c +++ b/gtk/gtkcolumnviewcolumn.c @@ -64,8 +64,9 @@ struct _GtkColumnViewColumn int fixed_width; - guint visible : 1; - guint resizable : 1; + guint visible : 1; + guint resizable : 1; + guint expand : 1; GMenuModel *menu; @@ -88,6 +89,7 @@ enum PROP_VISIBLE, PROP_HEADER_MENU, PROP_RESIZABLE, + PROP_EXPAND, PROP_FIXED_WIDTH, N_PROPS @@ -151,6 +153,10 @@ gtk_column_view_column_get_property (GObject *object, g_value_set_boolean (value, self->resizable); break; + case PROP_EXPAND: + g_value_set_boolean (value, self->expand); + break; + case PROP_FIXED_WIDTH: g_value_set_int (value, self->fixed_width); break; @@ -195,6 +201,10 @@ gtk_column_view_column_set_property (GObject *object, gtk_column_view_column_set_resizable (self, g_value_get_boolean (value)); break; + case PROP_EXPAND: + gtk_column_view_column_set_expand (self, g_value_get_boolean (value)); + break; + case PROP_FIXED_WIDTH: gtk_column_view_column_set_fixed_width (self, g_value_get_int (value)); break; @@ -298,6 +308,18 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass) FALSE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GtkColumnViewColumn:expand: + * + * Column gets share of extra width allocated to the view + */ + properties[PROP_EXPAND] = + g_param_spec_boolean ("expand", + P_("Expand"), + P_("column gets share of extra width"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GtkColumnViewColumn:fixed-width: * @@ -321,6 +343,7 @@ gtk_column_view_column_init (GtkColumnViewColumn *self) self->natural_size_request = -1; self->visible = TRUE; self->resizable = FALSE; + self->expand = FALSE; self->fixed_width = -1; } @@ -845,6 +868,49 @@ gtk_column_view_column_get_header_menu (GtkColumnViewColumn *self) return self->menu; } +/** + * gtk_column_view_column_set_expand: + * @self: a #GtkColumnViewColumn + * @expand: %TRUE if this column should expand to fill available sace + * + * Sets the column to take available extra space. + * + * The extra space is shared equally amongst all columns that + * have the expand set to %TRUE. + */ +void +gtk_column_view_column_set_expand (GtkColumnViewColumn *self, + gboolean expand) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self)); + + if (self->expand == expand) + return; + + self->expand = expand; + + if (self->visible && self->view) + gtk_widget_queue_resize (GTK_WIDGET (self->view)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EXPAND]); +} + +/** + * gtk_column_view_get_expand: + * @self: a #GtkColumnViewColumn + * + * Returns whether this column should expand. + * + * Returns: %TRUE if this column expands + */ +gboolean +gtk_column_view_column_get_expand (GtkColumnViewColumn *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self), TRUE); + + return self->expand; +} + /** * gtk_column_view_column_set_resizable: * @self: a #GtkColumnViewColumn diff --git a/gtk/gtkcolumnviewcolumn.h b/gtk/gtkcolumnviewcolumn.h index 459c4d372f..a0e9bd946c 100644 --- a/gtk/gtkcolumnviewcolumn.h +++ b/gtk/gtkcolumnviewcolumn.h @@ -96,6 +96,12 @@ void gtk_column_view_column_set_resizable (GtkColu GDK_AVAILABLE_IN_ALL gboolean gtk_column_view_column_get_resizable (GtkColumnViewColumn *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_column_set_expand (GtkColumnViewColumn *self, + gboolean expand); +GDK_AVAILABLE_IN_ALL +gboolean gtk_column_view_column_get_expand (GtkColumnViewColumn *self); + G_END_DECLS #endif /* __GTK_COLUMN_VIEW_COLUMN_H__ */ -- 2.30.2